package com.hyper_yang._01_jdbc.connect;

import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// 一个 connection对象就代表了一个数据库连接
public class ConnectionTest {
    @Test
    public void testConnect() throws ClassNotFoundException, SQLException {
        // 1、注册驱动，主动加载类 (回顾反射 reflect) # 类加载是为了执行 Driver中的 静态代码块 (DriverManager.registerDriver(new Driver());)
//        Class.forName("com.mysql.cj.jdbc.Driver");
//        DriverManager.registerDriver(new Driver()); # 可以 但实例化会多触发一次 register,没必要
//        SPI 机制: 是一种服务发现机制，允许在程序外部动态指定具体实现。
        // 在 META-INF下存在services.java.sql.Driver 可以不需要自己加载

        // 2、获取连接，
        // todo: url: 数据库连接地址  协议 (jdbc:mysql) IP (localhost) 端口 (3306) + 库名
        // # 使用 jdbc连接 mysql地址为 localhost(本机) 3306端口的 test1数据库
//        String url = "jdbc:mysql://localhost:3306/test1";
        // todo: 如果连接的是本机数据库，且端口是默认的 3306，则 localhost:3306可以省略
        String url = "jdbc:mysql:///test1"; //  jdbc:mysql://:3306/test1
        // todo: 用户名
        String username = "root";
        // todo: 密码
        String password = "abc123";
        Connection connection = DriverManager.getConnection(url, username, password);

        // 3、展示连接
        System.out.println(connection); // 只要不是 null就是连接成功

        // 4、释放资源
        connection.close();
    }

    @Test
    public void testConnect2() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "abc123");
        System.out.println(connection);
        connection.close();
    }
}
